package com.cheng.example.book.advise151.chap7.client113;


/**
 * 建议113：不要在finally块中处理返回值
 *
 * catch块在捕捉此异常后直接抛出，之后代码执行到finally代码块，就会重置返回值，结果就是-1了。也就是出现先返回，再重置返回的情况。
 *
 * 1、finally中的返回值能覆盖抛出的异常
 * 2、在finally中修改返回值的传值引用没用处
 */
public class Client113 {

    public static void main(String[] args) {
        try {
            System.out.println(doStuff(-1));
//            System.out.println(doStuff(100));
        } catch (Exception e) {
            System.out.println("这里是永远不会到达的");
        }
    }

    /**
     * 1、finally中的返回值能覆盖抛出的异常
     * @param b
     * @return
     */
    //该方法抛出受检异常
//    public static int doStuff(int _p) throws Exception {
//        try {
//            if (_p < 0) {
//                throw new DataFormatException(" 数据格式错误 ");
//            } else {
//                return _p;
//            }
//        } catch (Exception e) {
//            // 异常处理
//            throw e;
//        } finally {
//            return -1;
//        }
//    }

    /**
     *
     * 2、finally中的返回值不能覆盖返回值
     * @param b
     * @return
     */
    public static int doStuff(int b) {
        int a = 1;
        try {
            return a;
        } catch (Exception e) {

        } finally {
            // 重新修改一下返回值
            a = -1;
            return a;
        }
//        return 0;
    }


    

}